package com.itheima.edu.info.manager.service;

import com.itheima.edu.info.manager.dao.BaseStudentDao;
import com.itheima.edu.info.manager.dao.OtherStudentDao;
import com.itheima.edu.info.manager.dao.StudentDao;
import com.itheima.edu.info.manager.domain.Student;

import com.itheima.edu.info.manager.factory.StudentFactory;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Properties;

public class StudentService {
    String delId;
    //指挥库管把学生对象添加进系统
    //private OtherStudentDao dao = new OtherStudentDao();
        //业务员指挥库管从学生工厂获取学生对象
    private BaseStudentDao dao= StudentFactory.getStudentDao();

    //业务员中的添加功能
    public boolean addStudent(Student stu) {
        //将库管的添加结果退回给contriller客服
        return dao.addStudent(stu);
    }

    //业务员中的判断学号是否存在功能
    public boolean isExists(String id) {
        //1拿到系统中已有的的索引学号信息
        //1.1指挥库管将系统中索引学生信息查找出来
        Student[] allStudents = dao.findAllStudent();
        //2.拿要校验的id去已有的学号中遍历查找
        //2.1先假设要查找的id不存在
        boolean flag = false;

        //2.2遍历已有的学生信息
        for (int i = 0; i < allStudents.length; i++) {
            //2.3拿到每一个学生对象的学号
            Student stu = allStudents[i];
            //2.4当前索引位置的学生不为null，并且该学生的学号和要查找的学号一致时，修改标记
            if (stu != null && stu.getId().equals(id)) {
                flag = true;
            }
        }
        return flag;
    }

    //业务员中的查看所有学生功能
    public Student[] findAllStudent() {
        //1.指挥库管拿到所有学生信息
        Student[] allStudent = dao.findAllStudent();
        /*
            2.对库管返回的学生数组进行数据分析处理：
                2.1如果库管返回的数组中全是null，当前方法直接返回null
                2.2只要库管给我的数组中有一个学生信息，当前方法返回整个库管传过来的学生数据
         */
        //先假设查到的数组allStudent里面全是null，--假设一个学生都没有有
        boolean flag = false;

        //遍历allStudent
        for (int i = 0; i < allStudent.length; i++) {
            //拿到每一个索引位置的元素进行判断
            if (allStudent[i] != null) {
                flag = true;
                break;
            }
        }
        //根据flag的值来决定本次方法的返回值
        if (flag) {
            //有学生，返回allStudent
            Arrays.sort(allStudent, new Comparator<Student>() {
                @Override
                public int compare(Student o1, Student o2) {
                    if (o1!=null&&o2!=null){
                        return o1.getId().compareTo(o2.getId());
                    }else {
                        return 0;
                    }
                }
            });
            return allStudent;
        } else {
            return null;
        }

    }

    //业务员中的删除功能
    public void deleteStudentById(String delId) {
        //指挥库管进行删除学生动作
        dao.deleteStudentById(delId);
    }

    public void updateStudentById(String updateId, Student newStu) {
        //指挥库管进行修改学生信息动作
        dao.updateStudentById(updateId, newStu);
    }
        //业务员的登录功能
    public boolean login(String username, String password) {
        //拿到库管
        OtherStudentDao osd = new OtherStudentDao();
        //叫库管先查管理员信息
            Properties prop =osd.finAllUsers();
            //拿到库管的资料信息与入口输入的进行比对
        //标记位思想：先假设人员录入的不存在
        boolean flag=false;
        //拿人员录入的和资料的是否一致，如果一致修改标记
        if (prop.containsKey(username)&password.equals(prop.getProperty(username))){
                    flag=true;
        }
        //比到了，返回true，否则返回false
        return flag;

    }

}
